package cn.zhiwen.util;

import jdk.internal.util.xml.PropertiesDefaultHandler;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import java.util.ResourceBundle;

public class ReaderUtil {

    public static void main(String[] args) {
        System.out.println(getValuess("className"));
    }

    /**
     * 该方式只能读取类路径下的配置文件，有局限但是如果配置文件在类路径下比较方便。
     * @return
     */
    public static String getValue(String key) {
        try {
            Properties properties = new Properties();
            // 使用ClassLoader加载properties配置文件生成对应的输入流
            InputStream resourceAsStream = PropertiesDefaultHandler.class.getClassLoader().getResourceAsStream("application.properties");
            properties.load(resourceAsStream);
            return properties.getProperty(key);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 该方式的优点在于可以读取任意路径下的配置文件
     * @return
     */
    public static String getValues(String key) {
        try {
            Properties properties = new Properties();
            // 使用ClassLoader加载properties配置文件生成对应的输入流
            BufferedReader bufferedReader = new BufferedReader(new FileReader("D:\\WorkSpace\\LambdaAndStream\\jdk8Practise\\reflectDemo\\src\\main\\resources\\application.properties"));
            properties.load(bufferedReader);
            return properties.getProperty(key);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     *  ResourceBundle.getBundle() 静态方法来获取（ResourceBundle是一个抽象类），
     *  这种方式来获取properties属性文件不需要加.properties后缀名，只需要文件名即可
     * @return
     */
    public static String getValuess(String key){
        ResourceBundle bundle = ResourceBundle.getBundle("application");
        String baseBundleName = bundle.getString(key);
        return baseBundleName;
    }
}
